package com.dingding.dao.basedao;

import java.util.List;

import org.hibernate.criterion.Criterion;

/**
 * 
 * @ClassName: IBaseDao 
 * @Description:所有dao接口都继承自当前接口 
 * @author cheshaowei
 * @date 2015-9-14 下午04:45:56
 */
public interface IBaseDao<T>{
    
	/**
	 * 
	 * @Title: getById 
	 * @Description: 根据ID获取实体对象
	 * @param id 主键ID 
	 * @param isCache 是否使用查询缓存  true:是 false：不是
	 * @return T
	 * @throws
	 * 
	 */
	public T getById(String id,boolean isCache);
	
	/**
	 * 
	 * @Title: getById 
	 * @Description: 根据ID获取实体对象
	 * @param id 主键ID 
	 * @param isCache 是否使用查询缓存  true:是 false：不是
	 * @return T
	 * @throws
	 * 
	 */
    public T getById(Integer id,boolean isCache);
    
    
    
    /**
     * 
     * @Title: saveOrUpdate 
     * @Description: 保存或更新一个hibernate对象
     * @param t
     * @return void
     * @throws
     * 
     */
    public void saveOrUpdate(T t);
    
    /**
     *
     * @Title: save 
     * @Description:保存一个对象
     
     * @throws
     */
    public void save(T t);
    
    /**
     * 
     * @Title: update 
     * @Description: 保存
     * @param 待保存的对象
     * @return void
     * @throws
     * 
     */
    public void update(T t);     
    
    /**
     * 
     * @Title: delete 
     * @Description: 删除一个hibernate对象
     * @param @param t
     * @return void
     * @throws
     * 
     */
    public void delete(T t);
    
    /**
     * 
     * @Title: deleteRow 
     * @Description: 根据ID删除数据，并返回受影响行数
     * @param hql
     * @param id 主键ID
     * @return int 受影响行数
     * @throws
     */
    public int deleteRow(String hql,String id);
    
	
    /**
     * 
     * @Title: queryAll
     * @Description: 查询表中所有数据对象
     * @param isCache 是否使用缓存 true：使用 false： 不使用
     * @return List<T> 查询到的数据集合
     * @throws
     * 
     */
    public List<T> queryAll(boolean isCache);
	
    /**
     * 
     * @Title: queryCriteriaList 
     * @Description: 根据条件查询数据
     * @param criterion 查询条件
     * @param isCache 是否使用查询缓存 true:使用 false：不使用
     * @return List<T> 查询到的数据集合
     * @throws
     */
    public List<T> queryCriteriaList(Criterion criterion,boolean isCache);
	
	/**
	 * 
	 * @Title: listHqlUnResult 
	 * @Description: 根据条件查询唯一对象
	 * @param criteria 查询条件
	 * @return T
	 * @throws
	 */
	public T queryCriteriaUnResult(Criterion criterion,boolean isCache);
	
	
	/**
	 * 
	 * @Title: listHql 
	 * @Description: Hql带参查询
	 * @param Hql 自定义Hql
	 * @param parm 参数值
	 * @return List<T> 查询到的数据集合
	 * @throws
	 * 
	 */
	public List<T> listHql(String hql, boolean isCache, Object... parm);
	
	/**
	 * 
	 * @Title: hqlQueryListByPage 
	 * @Description: Hql带参分页查询
	 * @param Hql 自定义Hql
	 * @param currentPage 当前页
	 * @param pageSize 每页显示记录数
	 * @param parm 参数值
	 * @return List<T> 查询到的数据集合
	 * @throws
	 * 
	 */
	public List<T> hqlQueryListByPage(String hql,int currentPage,int pageSize,boolean isCache, Object... parm);
	
	/**
	 * 
	 * @Title: listSqlObj 
	 * @Description: 原生sql查询
	 * @param sql 
	 * @param currentPage 当前页
	 * @param pageSize 每页显示记录数
	 * @param parm
	 * @return List<Object[]>   
	 * @throws
	 */
	public List<Object[]> sqlQueryListObj(String sql,boolean isCache,Object...parm);
	
	/**
	 * 
	 * @Title: sqlQueryUnResultObj
	 * @Description: 原生sql查询
	 * @param sql 原生sql
	 * @param isCache 是否使用缓存
	 * @param parm 查询条件
	 * @return Object[] 查询到的单个数据
	 * @throws
	 */
	public Object[] sqlQueryUnResultObj(String sql, boolean isCache,
			Object... parm) ;
	/**
     * @Title: queryCriteriaListByPage 
     * @Description: 根据条件查询数据,带分页
     * @param criterion 查询条件
     * @param isCache 是否使用查询缓存 true:使用 false：不使用
     * @return List<T> 查询到的数据集合
     * @throws
     */
    public List<T> queryCriteriaListByPage(Criterion criterion,String order,int currentPage,int pageSize,boolean isCache);
	
    /**
     * @Title: updateSqlRow 
     * @Description: 执行修改SQL语句
     * @param sql 拼接SQL
     * @param parm 不定参
     * @return int    返回类型 
     * @throws
     */
    public int updateSqlRow(String sql, Object... parm);
    
    /**
     * 
     * @Title: addNativeSQLRow 
     * @Description: 自定义sql添加
     * @param sql:自定义sql 
     * @param parm:参数值
     * @return int 受影响行数 
     * @throws
     */
    public int addNativeSQLRow(String sql,Object...parm);
    
    /**
     * 
     * @Title: queryCriteriaList 
     * @Description: 根据条件查询数据
     * @param criterion 查询条件
     * @param isCache 是否使用查询缓存 true:使用 false：不使用
     * @return List<T> 查询到的数据集合
     * @throws
     */
    public List<T> queryCriteriaListByOrderDesc(Criterion criterion,String orderString,boolean isCache);
    
}
